Dashboard 除了 Panel 的設定外,Variable 的功能能夠大幅提升 Dashboard 的彈性與應用性。
還記得在 Dashboard 與 Monitoring 的最佳實踐章節中提到的 Exploratory Dashboard 嗎?當設計 Dashboard 時,會希望同一個 Dashboard 能夠檢視不同的目標資料,例如 Node Exporter 的 Dashboard 可以透過下拉選單檢視不同的機器,而不需要為每一台機器建立獨立的 Dashboard。這些下拉選單所對應的就是 Variable,當在 Panel Query 中使用這些 Variable,Dashboard 的內容會隨著 Variable 的變動而更新。
在 Dashboard 的設定頁中,可以透過 Variables 頁籤查看與編輯 Variables。


常用的 自訂 Variable 類型包括:
, 分隔。
自訂 Variable 與時間區間選擇會反映在 URL 中,稱為 Dashboard URL variables,使用相同的 URL 就可以套用相同的 Variable 設定。
除了自訂 Variable 外,Grafana 本身還提供了 Global Variable,如:
$__dashboard:當前 Dashboard 名稱。$__from、$__to:當前選擇的時間範圍起點與終點的 Unix timestamp。$__timezone:當前 Dashboard 使用的時區。$__user:當前使用者 ID。$__org、${__org.name}:當前 Organization 的 ID 與名稱,當 Variable 需要透過 . 往下取得資料或是與其他文字相連時要使用 {} 包起來才能正確解析。
Variable 幾乎可以應用於 Dashboard 的各個部分,例如 Query 語法、Visualization 設定等。常見應用場景如下:
在 Text、Panel Title 或 Description 中可直接引用 Variable。如果有格式需求,可以透過 Syntax 功能用 ${var_name:<format>} 這種方式調整,例如:
${__to:date} 效果如 2020-07-13T20:19:09.254Z,但只能夠顯示 UTC 時間。${__to:date:seconds} 效果如 1594671549。${__to:date:YYYY-MM-DD HH:mm:ss} 效果如 2024-09-21 00:37:00。${__to:date:YYYY-MM-DD} 效果如 2024-09-21。${custom:csv} 效果如 grafana,tempo,mimir。${custom:json} 效果如 ["grafana","tempo","mimir"]。${custom:queryparam} 效果如 var-custom=grafana&var-custom=tempo&var-custom=mimir。
在一些 Visualization 中的 Tooltip 能夠顯示超連結稱為 Data Link,例如 Bar Chart、Time Series、Table 等,透過 Data link variable 可以取用當前資料的欄位值,如 ${__data.fields["Ticker Symbol"] 取得某筆資料的 Ticker Symbol 欄位值。。



在 Visualization 設定的 Data Link 的欄位中輸入 $ 會跳出可用的 Variable 選單以及簡單的說明,可以快速使用各種 Variable 無需記憶取用方式。


Table 有更多的 Field Data link variable 可以使用
有時候會發現使用 Autocomplete 方式設定的連結跳轉後會被塞入奇怪的字串 %EF%BB%BF,例如 https://server.local/grafana/hosta%EF%BB%BF/foo,但在設定欄位看起來一切正常,這是因為這串字串在設定欄位會顯示為空白字串,可以將設定欄位中的內容全部複製,貼至 View non-printable unicode characters 移除特殊字元,詳細討論可以參考 Grafana Issue 25107。

除了連結外部網站外,也可以連結其他 Dashboard 並搭配前面提到的 Dashboard URL variables 功能,使用 Variable 組出 Dashboard 的 Query parameter 優化使用者在不同 Dashboard 切換與調整篩選的流程。


點擊前一張圖的連結後,可以將 URL 的變數直接帶到開啟的 Dashboard 中
Variable 作為 Query 的查詢參數應用在大部分的 Dashboard 中,能夠讓同一個 Dashboard 用於檢視不同的目標,例如 Node Exporter Dashboard、cAdvisor Dashboard。Variable 的使用方式與基礎顯示一樣,透過 ${variable-name} 放入各種 Data Source 的 Query 語法中即可。

Panel Repeat 與 Row Repeat 的功能能夠根據多個目標逐個產生 Visualization Panel 或 Row,達到 For Loop 的效果,在被指定 Repeat 的 Panel 或 Row 使用被 Repeat 的 Variable 時只要繼續使用原本的 Variable 名稱即可。

Panel Repeat 效果

Panel Repeat 設定方式

Row Repeat 效果

Row Repeat 在 Row 的設定方式

Row Repeat 的 Panel 無須特別設定,正常使用 Variable 即可
範例程式碼:https://github.com/blueswen/grafana-zero-to-hero/tree/main/03-dashboard
此 Lab 會建立
啟動所有服務
docker-compose up -d
檢視服務
admin/admin
關閉所有服務
docker-compose down
善用 Variable 可以讓 Dashboard 更加靈活,不僅可以簡化操作,還能結合 Data Link 功能,實現外部或內部跳轉,提供更好的使用體驗。
在 Dashboard 系列中,我們首先介紹了設計的最佳實踐與各種 Visualization,接著探討了資料格式與 Visualization 的對應,最後介紹了 Variable 的應用。儘管無法涵蓋所有功能,但這些應該足夠應付大多數需求。接下來我們將進入 Data Source 篇章。